//
//  LS_TabBar.m
//  yiYuanDuoBao
//
//  Created by 罗李苏 on 16/11/25.
//  Copyright © 2016年 罗李苏. All rights reserved.
//

#import "LS_TabBar.h"
#import "UIImage+EXtension.h"
#import "UIView+LSExtension.h"
#import "UIColor+CBJExtention.h"
#define margin 10
@interface LS_TabBar ()

//特殊按钮
@property (nonatomic, strong) UIButton *plusBtn;

@end
@implementation LS_TabBar
- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor whiteColor];
#warning 当item的文字颜色和背景图片一样时才可是使用tintColor这个属性
//        self.tintColor = [UIColor colorWithRed:255.0/255.0 green:33.0/255.0 blue:4.0/255.0 alpha:1];
        
        [self setShadowImage:[UIImage imageWithColor:[UIColor clearColor]]];
        
        //设置按钮不同状态的图片
        UIButton *button = [[UIButton alloc] init];
        [button setBackgroundImage:[UIImage imageNamed:@"购买数量_加_icon"] forState:UIControlStateNormal];
        [button setBackgroundImage:[UIImage imageNamed:@"20-我的-头像"] forState:UIControlStateHighlighted];
        
        //保存按钮
        self.plusBtn = button;
        
        //给按钮添加点击事件
        [self.plusBtn addTarget:self action:@selector(PlusBtnDidClick) forControlEvents:UIControlEventTouchUpInside];
        
        //把特殊按钮添加到视图
        [self addSubview:button];
    }
    return self;
}

- (void)PlusBtnDidClick{

    //判断如果tabBar的代理者实现了代理方法,就调用代理方法
    if ([self.delegate respondsToSelector:@selector(tabBarPlusBtnClick:)]) {
        
        [self.MyDelegate tabBarPlusBtnClick:self];
    }
}

-(void)layoutSubviews{

    [super layoutSubviews];
    
    self.plusBtn.centerX = self.centerX - margin;
    
    self.plusBtn.centerY = self.height * 0.5 - 2 * margin;
    
    self.plusBtn.size = CGSizeMake(self.plusBtn.currentBackgroundImage.size.width, self.plusBtn.currentBackgroundImage.size.height);
    
    //按钮上的文字
    UILabel *label = [[UILabel alloc] init];
    label.text = @"喊爸爸";
    label.font = [UIFont systemFontOfSize:11];
    [label sizeToFit];
    label.textColor = [UIColor purpleColor];
    [self addSubview:label];
    label.centerX = self.plusBtn.centerX;
    label.centerY = CGRectGetMaxY(self.plusBtn.frame) + margin;
    
    //设置特殊按钮的位置,系统按钮的类型是UITabBarButton, 找出这些类型的按钮, 然后重新排布位置, 空出中间的位置
    
    Class class = NSClassFromString(@"UITabBarButton");
    
    int btnIndex = 0;
    for (UIView *btn in self.subviews) {
        //判断子控件的类型
        if ([btn isKindOfClass:class]) {
            //调整按钮的位置
            btn.width = self.width / 5;
            btn.x = btn.width * btnIndex;
            btnIndex++;
            
            if (btnIndex == 2) {//给特殊按钮留位置
                btnIndex++;
            }
        }
    }
    [self bringSubviewToFront:self.plusBtn];
}

//重写hitTest方法, 去监听发布按钮的点击, 目的是为了让凸出的部分也能响应点击事件
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{

    //这是一个判断的关键, 不判断的话push到其他页面, 点击发布按钮的位置也是会有反应的, 这样就不好了
    //self.isHidden == NO 说明当前页面是有tabbar的，那么肯定是在导航控制器的根控制器页面
    //在导航控制器根控制器页面，那么我们就需要判断手指点击的位置是否在发布按钮身上
    //是的话让发布按钮自己处理点击事件，不是的话让系统去处理点击事件就可以了
    if (self.isHidden == NO) {
        
        //将当前tabbar的触摸点转换坐标系，转换到发布按钮的身上，生成一个新的点
        CGPoint newP = [self convertPoint:point toView:self.plusBtn];

        //判断如果这个新的点是在发布按钮身上，那么处理点击事件最合适的view就是发布按钮
        if ([self.plusBtn pointInside:newP withEvent:event]) {
            return self.plusBtn;
        }else{
        
            //如果这个点不在特殊按钮上,那么返回让系统处理
            return [super hitTest:point withEvent:event];
        }

    }else{
    
        //tabBar隐藏了说明,push到了其他界面,让系统判断最佳的处理对象
        return [super hitTest:point withEvent:event];
    }
}
@end
